Software switches may be implemented on a host, such as a server, and may be used to forward data from one connected device to another, much like a hardware router. Direct memory access (DMA) of the packets may be done to transfer the data to the software switch, determine a destination for the data, and then initiate a further transfer of the data to the destination. The host operating the software switch may require significant buffer space in order to receive the data and in order to determine the destination.
In some servers that implement a software switch, a network accelerator may be used to accelerate the network functions, including for example, virtual switching. On a network accelerator, the data is received as packets, and packet switching decisions are made based on metadata provided by system software on the host and on the parsed headers of the packet, which is normally DMA'ed (direct memory accessed) from the host system, for example through a PCI-E (peripheral component interconnect express) bus.
Network accelerators may be able to DMA an entire packet to the accelerator then parse the packet and make a forwarding decision. A second DMA may be initiated when the destination of the packet is a virtual port/interface. This results in the accelerator having a memory large enough to buffer the packets, which may have size of 64B-64K each. The second DMA also increases latency of packet processing.